package StringTest;
/*
String类
    1.String表示字符串类型属于引用数据类型，不属于基本数据类型
    2.在java中随便使用双引号括起来的都是String对象
    3.java中规定，双引号括起来的字符串是不可变的
    4.在jdk中，双引号括起来的字符串，例如:"abc"等都是直接存储在方法区的字符串常量池当中
 */
public class StringTest1 {
    public static void main(String[] args){
        //这两行代码表示底层创建了3个字符串对象，都在字符串常量池当中
        String s1 = "abcdef";
        String s2 = "abcdef" + "xy";

        //这是使用new的方式创建的字符串对象，这个代码中的"xy"从哪里来？
        //凡是双引号括起来的，都在字符串常量池中有一份
        //new对象的时候一定在堆内存中开辟空间，在对象里面存储着"xy"的内存地址
        String s3 = new String("xy");

        //分析以下程序创建了几个对象
        /*
        一共创建了3个对象
            方法区字符串常量池当中有1个"hello"
            堆内存中有两个String对象，一共3个
         */
        String s4 = new String("hello");
        String s5 = new String("hello");
    }
}
